package controllers;


import play.*;
import play.data.validation.Required;
import play.db.DB;
import play.mvc.*;

import java.sql.ResultSet;
import java.util.*;

import models.*;


public class CUsuario extends Controller{
	

	public static void cadastrarUsuario(@Required String usuario, @Required String email,@Required String login,@Required String senha) 
	{
		//cria objeto usuario
		Usuario novoUsuario = new Usuario(usuario, email, login, senha);		
	
		//pegar a confirmação da senha
		String confirmasenha = request.params.get("confirmasenha");
		
		//Verifica se todos os campos foram preenchidos
		if(validation.hasErrors())
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("Preencha todos os campos");
			render("Application/cadastrarusuario.html",novoUsuario);
		}
		
		if(validarLogin(login))
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("o login já existe!");
			render("Application/cadastrarusuario.html",novoUsuario);
		}
		
		//valida senha
		if(!senha.equals(confirmasenha))
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("Senha não confere");
			render("Application/cadastrarusuario.html",novoUsuario);
		}
		else
		{
			//salva usuario no banco de dados
			novoUsuario.setEmail(novoUsuario.getEmail().trim());
			novoUsuario.setUsuario(novoUsuario.getUsuario().trim());
			novoUsuario.setUsuario(novoUsuario.getUsuario().trim());
			novoUsuario.save();

			//redireciona para o a pagina de login
			Application.login()	;
		}
	}
	
	public static void editarUsuario(long idUsuario)
    {
    	//Verifica se o usuario esta logado
		if(session.current().isEmpty())
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("usuario não autenticado!");
			Application.login();
		}
		else
		{
			//localiza o usuario
			Usuario usuario = Usuario.find("id", idUsuario).first();
			
			//captura dados enviados pela view editarUsuario
			String senha 		  = request.params.get("senha");
			String confirmarsenha = request.params.get("confirmarsenha");
			String nome			  = request.params.get("usuario").trim();
			String email     	  = request.params.get("email").trim();
    
			//valida senha
			if(!senha.equals(confirmarsenha))
			{
				//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
				flash.error("Senha não confere!");
				Application.editarUsuario(idUsuario);
			}
			else
			{
				//verifica alteração no email
				if(!email.equals(""))
					usuario.setEmail(email);
    		
				//verifica alteração no nome do usuario
				if(!nome.equals(""))
					usuario.setUsuario(nome);
    	
				//verifica alteração na senha
				if(!senha.equals(""))
					usuario.setSenha(senha);
    		
				//salva a lteracoes
				usuario.setEmail(usuario.getEmail().trim());
				usuario.setUsuario(usuario.getUsuario().trim());
				usuario.setUsuario(usuario.getUsuario().trim());
				usuario.save();
    		
				//redireciona para o a pagina index
				Application.index(); 
			}	
		}
 	
    }
	
	public static void efetuarLogin(@Required String login, @Required String senha)
	{
		//pega o usuario referente ao login passado
		Usuario usuario = Usuario.find("login", login).first();
	
		
		if(usuario == null)
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("Login ou Senha não informados!");
			Application.login();
		}
		
		//Verifica se todos os campos foram preenchidos
		if(validation.hasErrors())
		{
			//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
			flash.error("Login ou Senha não informados!");
			Application.login();
		}
		else
		{
			//verifica a senha
			if(usuario.getSenha().equals(senha))
			{
				//Cria a sessão do usuario
				session.current().put("usuarioCod", usuario.getId());
				session.current().put("usuarioNome", usuario.getUsuario());
				session.current().put("usuarioLogin", usuario.getLogin());
				session.current().put("usuarioEmail", usuario.getEmail());
				session.current().put("usuarioSenha", usuario.getSenha());
				
				//redireciona para o a pagina de index
				Application.index();
			}
			else
			{
				//Dispara mensagem de erro e redireciona para a pagina onde o erro é exibido
				flash.error("Login ou Senha Invalidos!");
				render("Application/login.html",usuario);
			}
		}
	}
	
	public static void efetuarLogout()
	{
		//limpa a sessão
		session.current().clear();	
		
		//redireciona para o a pagina de login
		Application.login();
	}
	
	
    public static boolean validarLogin(String login)
    {
    	    	
    	Usuario usuario =  Usuario.find("login",  login.trim()).first();
    	
    	if(usuario != null)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    	
    }
	
}
